package com.changgou.pay.service.impl;

import com.changgou.pay.service.WxPayService;
import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wz
 * @company 公司
 * @create 2020-04-10 11:24
 */
@Service
public class WxPayServiceImpl implements WxPayService {

    @Autowired
    private WXPay wxPay;

    @Value("${wxpay.notify_url}")
    private String notifyUrl;

    //统一下单接口调用
    @Override
    public Map nativePay(String orderId, Integer money) {

        try {
            //1.封装请求参数
            HashMap<String,String> map = new HashMap<>();
            map.put("body","商品");//商品描述
            map.put("out_trade_no",orderId); //订单号

//            map.put("total_fee",String.valueOf(money*100)); //金额已分为单位
            BigDecimal payMoney = new BigDecimal("0.01");// 单位元
            BigDecimal fen = payMoney.multiply(new BigDecimal("100")); //1.00 单位分  乘法操作
            fen=fen.setScale(0,BigDecimal.ROUND_UP);//保留小数点后几位 向上取整
            map.put("total_fee",String.valueOf(fen));

            map.put("spbill_create_ip","127.0.0.1");
            map.put("notify_url",notifyUrl);//回调地址,随便填一下
            map.put("trade_type","NATIVE");//交易类型

            //2.基于wxpay完成统一下单接口调用,并返回获取结果
            Map<String, String> result = wxPay.unifiedOrder(map);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }

    }

    /**
     * 调用 微信接口 根据订单号查询订单信息
     * @param orderId
     * @return
     */
    @Override
    public Map queryOrder(String orderId) {
        Map<String,String> map = new HashMap<>();
        map.put("out_trade_no",orderId);
        try {
            return wxPay.orderQuery(map);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 基于微信关闭订单
     * @param orderId
     * @return
     */
    @Override
    public Map closeOrder(String orderId) {
        try {
            Map<String,String> map = new HashMap<>();
            map.put("out_trade_no",orderId);
            Map<String, String> resultMap = wxPay.closeOrder(map);
            return resultMap;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
